package com.example.jpa.repository;

import com.example.jpa.entity.StudentInf;
import com.example.jpa.entity.dto.JoinInfDTO;
import com.example.jpa.entity.dto.StudentInfDTO;
import com.querydsl.core.QueryResults;

import java.util.List;

/**
 * @author qilongxin
 * @date 2021/8/25 23:04
 */
public interface CustomStudentInfRepository {

    // 查询字段
    List<String> getStudentName();

    // 查询对象
    List<StudentInf> getStudentInfList();

    // where条件查询  精确查询
    StudentInfDTO getStudentById(Long studentId);

    // where条件查询  模糊查询
    List<StudentInfDTO> getStudentInfDTOList();

    // 更新地址
    Long updateAddress(Long studentId, String address, String englishName, Integer age);

    // 删除记录
    Long deleteStudentInf(Long studentId);

    // 内连接
    List<JoinInfDTO> getStudentInfInnerJoin();

    // 左外连接
    List<JoinInfDTO> getStudentInfLeftJoin();

    // 右外连接
    List<JoinInfDTO> getStudentInfRightJoin();

    // 多条件查询
    List<StudentInfDTO> multiCriteriaSelect(String name, String address, Integer age);

    // 单表动态查询
    List<StudentInf> dynamicSelect(String englishName, String address, Integer age);

    // 单表动态 + 分页查询
    QueryResults<StudentInf> dynamicPageSelect(String englishName, String address, Integer age, Integer pageIndex, Integer pageSize);

    // 聚合函数
    void aggregateFunc(Long studentId, String englishName, Integer age);

    // todo Example查询


    // todo Specification查询


    // todo 多表操作
}
